'''
、写一个面向对象的例子：
- 比如创建一个类（Animal）【动物类】，类里有属性（名称，颜色，年龄，性别），类方法（会叫，会跑）ok
- 创建子类【猫】，继承【动物类】ok
- 重写父类的__init__方法，继承父类的属性ok
- 添加一个新的属性，毛发=短毛ok
- 添加一个新的方法， 会捉老鼠，ok
- 重写父类的【会叫】的方法，改成【喵喵叫】ok
- 创建子类【狗】，继承【动物类】ok
- 复写父类的__init__方法，继承父类的属性ok
- 添加一个新的属性，毛发=长毛ok
- 添加一个新的方法， 会看家ok
- 复写父类的【会叫】的方法，改成【汪汪叫】ok
2、在入口函数中创建类的实例
- 创建一个猫猫实例ok
- 调用捉老鼠的方法ok
- 打印【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】ok
- 创建一个狗狗实例---ok
- 调用【会看家】的方法ok
- 打印【狗狗的姓名，颜色，年龄，性别，毛发】ok
'''

#父类，动物
class Animal:
    '''
    类属性：名称 name , 颜色 color , 年龄 age ,性别 sex
    类方法： 会叫 bite , 会跑 run
    '''
    #构造函数
    def __init__(self, name , color ,age ,sex):
        #在构造函数中定义实例变量
        #实例变量，类中，方法中，以self开头
        #把接受到的值赋值给实例变量
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex

    def bite(self , voice):
        print(f"{self.name } 会{voice}叫")

    def run(self):
        print(f"{self.name } 会跑")


#子类 猫猫
class Cat(Animal):

    def __init__(self, name , color ,age ,sex,hair):
        self.hair = hair
        super().__init__(name , color ,age ,sex)

    def mouse(self):
        print(f"{self.name } 会抓老鼠")

    def look_style(self):
        print(f"本{self.name}的外观为：,颜色为：{self.color}, 年龄为{self.age},性别为{self.sex } ,毛发为{self.hair }")

    def bite(self, voice):
        super(Cat ,self).bite(voice)


#子类 狗狗
class Dog(Animal):

    def __init__(self, name , color ,age ,sex,hair):
        self.hair = hair
        super().__init__(name , color ,age ,sex)

    def House(self):
        print(f"{self.name } 会看家")

    def look_style(self):
        print(f"本{self.name}的外观为：,颜色为：{self.color}, 年龄为{self.age},性别为{self.sex } ,毛发为{self.hair }")

    def bite(self, voice):
        super(Dog ,self).bite(voice)


if __name__ == '__main__':
    #实例化
    #猫猫
    cat = Cat("猫", "黑色","1个月" , "男","短毛")
    cat.look_style()
    cat.mouse()
    cat.bite("喵喵")
    #狗狗
    dog = Dog("狗","黑色","1个月" ,"男","长毛")
    dog.look_style()
    dog.House()
    dog.bite("汪汪")


